package routers

import (
	"system-admin/internal/app/web/controller"

	"github.com/gin-gonic/gin"
)

func Default(r *gin.Engine) {
	r.MaxMultipartMemory = 500 * 1024 * 1024
	r1 := r.Group("/system-admin")
	{
		// 登录
		r1.POST("/login", controller.Index{}.Login)                 // 后台登录
		r1.POST("/device/login", controller.Index{}.LoginForDevice) // 设备端登录
		r1.GET("/captcha", controller.Index{}.GetCaptcha)           // 获取图形验证码
		r1.POST("/login-v2", controller.Index{}.LoginV2)            // 登录
		// 登出
		r1.POST("/logout", controller.User{}.Logout)
		// 判断登录token是否有效
		r1.GET("/login-token/isvalid", controller.User{}.LoginTokenCheck)

		// 开放免认证
		{
			publicAPIRouter := r1.Group("/public")
			publicAPIRouter.GET("/area/all", controller.Area{}.All)                      // 全部区域
			publicAPIRouter.GET("/area/all-tree", controller.Area{}.AllTree)             // 全部区域-树状结构
			publicAPIRouter.GET("/alarm/notify-detail", controller.Alarm{}.NotifyDetail) // 告警通知详情
		}

		// 角色
		{
			r1.GET("/role/all", controller.Role{}.All)                                    // 角色列表
			r1.GET("/role/list", controller.Role{}.List)                                  // 角色列表
			r1.POST("/role/add", controller.Role{}.Add)                                   // 新增角色
			r1.POST("/role/edit", controller.Role{}.Edit)                                 // 编辑角色
			r1.POST("/role/delete", controller.Role{}.Delete)                             // 删除角色                                       // 获取角色的权限
			r1.GET("/role/auth-rules", controller.Role{}.GetRoleAuthRules)                // 获取角色的权限
			r1.GET("/role/auth-rules-checked", controller.Role{}.GetRoleAuthRulesChecked) // 获取角色的权限
			r1.POST("/role/set-auth-rules", controller.Role{}.SetRoleAuthRules)           // 设置角色的权限
		}

		// 商户
		{
			r1.GET("/merchant/all", controller.Merchant{}.All)                         // 获取所有商户
			r1.GET("/merchant/list", controller.Merchant{}.List)                       // 商户列表
			r1.POST("/merchant/add", controller.Merchant{}.Add)                        // 新增商户
			r1.POST("/merchant/edit", controller.Merchant{}.Edit)                      // 编辑商户
			r1.POST("/merchant/delete", controller.Merchant{}.Delete)                  // 删除商户
			r1.POST("/merchant/set-admin-user", controller.Merchant{}.SetAdminUser)    // 设置商户管理员
			r1.POST("/merchant/reset-api-token", controller.Merchant{}.CreateAPIToken) // 生成商户接口凭证
		}

		// 用户
		{
			r1.GET("/user/all", controller.User{}.All)                  // 获取全部用户
			r1.GET("/user/list", controller.User{}.List)                // 用户列表
			r1.GET("/user/detail", controller.User{}.UserDetail)        // 用户详情
			r1.GET("/user/auth-rules", controller.Role{}.GetAuthRules)  // 获取用户权限
			r1.POST("/user/password", controller.User{}.ModifyPassword) // 修改密码
			r1.POST("/user/add", controller.User{}.Add)                 // 新增用户
			r1.POST("/user/edit", controller.User{}.Edit)               // 编辑用户
			r1.POST("/user/delete", controller.User{}.Delete)           // 删除用户
			r1.POST("/user/disable", controller.User{}.Disable)         // 禁用用户
			r1.GET("/user/get-wechat-openid", controller.User{}.GetUserWechatOpenID)
		}

		// 告警通知
		{
			r1.GET("/alarm/alarm-types", controller.Alarm{}.GetAlarmTypes)                   // 告警类型
			r1.GET("/alarm/notify-types", controller.Alarm{}.GetNotifyTypes)                 // 通知方式
			r1.GET("/alarm/notify-rules", controller.Alarm{}.NotifyRuleList)                 // 通知规则列表
			r1.POST("/alarm/add-notify-rule", controller.Alarm{}.AddNotifyRule)              // 新增通知规则
			r1.POST("/alarm/edit-notify-rule", controller.Alarm{}.EditNotifyRule)            // 编辑通知规则
			r1.POST("/alarm/delete-notify-rule", controller.Alarm{}.DeleteNotifyRule)        // 删除通知规则
			r1.GET("/alarm/notify-records", controller.Alarm{}.AlarmNotifyRecords)           // 告警通知记录
			r1.GET("/alarm/alarm-receive-status", controller.Alarm{}.GetAlarmReceiveStatus)  // 获取告警接收状态
			r1.POST("/alarm/alarm-receive-status", controller.Alarm{}.SetAlarmReceiveStatus) // 设置告警接收状态
			r1.GET("/alarm/user/options", controller.Alarm{}.UserOptions)                    // 用户选项
		}

		// 文件操作
		{
			r1.POST("/file/upload", controller.File{}.Upload) // 文件上传
		}
	}
}
